Jumping back to a previous statement using GOTO
is a way to reimplement loops, which PL/SQL already provides in much more readable
forms.
Noncompliant code example
SET SERVEROUTPUT ON
DECLARE
result PLS_INTEGER := 0;
counter PLS_INTEGER := 1;
BEGIN
<<loop>>
result := result + counter;
counter := counter + 1;
IF counter <= 9 THEN
GOTO loop; -- Noncompliant
END IF;
DBMS_OUTPUT.PUT_LINE('Sum from 1 to 9 is ' || result); -- Displays 1 + 2 + ... + 8 + 9 = 45
END;
/
Compliant solution
SET SERVEROUTPUT ON
DECLARE
result PLS_INTEGER := 0;
BEGIN
FOR counter IN 1 .. 9 LOOP
result := result + counter;
END LOOP;
DBMS_OUTPUT.PUT_LINE('Sum from 1 to 9 is ' || result); -- Displays 1 + 2 + ... + 8 + 9 = 45
END;
/